# 1、有这样的一个列表，深度不可知，列表里面还会嵌套列表，我想要把这个列表从左到右拼接成一个新的列表，且顺序不变
# 举例：[12,33,[11,22,33,[55,66,99]],[55,66]]
# 变成：[12, 33, 11, 22, 33, 55, 66, 99, 55, 66]
new_list = [12,33,[11,22,33,[55,66,99]],[55,66]]
result1 = []
def f_list(list1:list):
    for i in list1:
        if type(i) == list:
            f_list(i)
        else:
            result1.append(i)
    return result1
print(f_list(new_list))


# 2、编写装饰器，为多个函数加上认证的功能（用户的账号密码）
#  要求登录成功一次，后续的函数都无需输入用户名和密码
result = False
def login(func):
    def setup(*args):
        global result
        if result:
            print("免登录")
            func(*args)
        else:
            user = input("请输入账号")
            pwd = input("请输入密码")
            if user == "admin" and pwd == '123456':
                result = True
                print("登录成功！")
                func(*args)
        return result
    return setup
@login
def shoping(name,age,money):
    print(f"{name}购买了东西，他今年{age}岁，花了{money}钱"
    )
# shoping("王长帅",'19',100)
# shoping("王长帅",'19',100)

# 3、请实现一个装饰器，把函数的返回值+100然后返回
def return_num(func):
    def set_up():
        global num
        num += 100
        func()
        return num
    return set_up
num = 0
@return_num
def get_num():
    print("开始计算值")
print(get_num())
print(get_num())


# 4、请实现一个装饰器，通过一次调用使函数重复执行5次
def fanfu(func):
    def set(count):
        func(count)
        for i in range(0,count):
            print("我在吃饭")
    return set
@fanfu
def eat(count):
    print(f"开始进行{count}次反复")
# eat(5)
# 5、输入任意个字符串,分别实现从小到大输出和从大到小输出
# 6、接收n个数字，求这些参数数字的和
# 7、编写一个函数，实现数字的自增（从0开始，每调用一次，数字+1）
def add_num():
    num = 0
    def set():
        nonlocal num
        num+=1
        return num
    return set


a = add_num()
print(a())
print(a())
print(a())
